package cn.bugstack.config;

import cn.bugstack.trigger.listener.OrderPaySuccessListener;
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import com.google.common.eventbus.EventBus;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.concurrent.TimeUnit;

@Configuration
// 构建本地缓存
public class GuavaConfig {
    /**
     * 创建一个本地缓存，用于临时存储数据，3秒后失效
     */
    @Bean(name = "cache")
    public Cache<String, String> cache() {
        return CacheBuilder.newBuilder()
                .expireAfterWrite(3, TimeUnit.SECONDS)
                .build();
    }
    /**
     * 创建一个 EventBus，用于处理订单支付成功事件。
     */
    @Bean
    public EventBus eventBusListener(OrderPaySuccessListener listener) {
        EventBus eventBus = new EventBus();
        // 将 [OrderPaySuccessListener] 注册为事件监听器。
        eventBus.register(listener);
        // listener 在订单支付成功后触发一些异步操作，如发送通知、更新状态等。
        return eventBus;
    }
    /**
     * 专门用于存储微信的 access_token 的缓存。写入后 2 小时过期。
     */
    @Bean(name = "weixinAccessToken")
    public Cache<String, String> weixinAccessToken() {
        return CacheBuilder.newBuilder()
                .expireAfterWrite(2, TimeUnit.HOURS)
                .build();
    }
    /**
     * 专门用于存储微信的 openid 的缓存。写入后 1 小时过期。
     */
    @Bean(name = "openidToken")
    public Cache<String, String> openidToken() {
        return CacheBuilder.newBuilder()
                .expireAfterWrite(1, TimeUnit.HOURS)
                .build();
    }

}
